#include "Attributes.h"

void packDatabackToJson(rapidjson::Value& value, rapidjson::Document& doc, const Databank < int64_t >& bank)
{
    for (auto& it = bank.begin(); it != bank.end(); ++it)
    {
        value.AddMember(rapidjson::GenericValue<rapidjson::UTF8<>>(it->first.c_str(), doc.GetAllocator()), it->second, doc.GetAllocator());
    }
}

void packDatabackToJson(rapidjson::Value& value, rapidjson::Document& doc, const Databank < std::string >& bank)
{
    for (auto& it = bank.begin(); it != bank.end(); ++it)
    {
        value.AddMember(rapidjson::GenericValue<rapidjson::UTF8<>>(it->first.c_str(), doc.GetAllocator()), 
                        rapidjson::GenericValue<rapidjson::UTF8<>>(it->second.c_str(), doc.GetAllocator()), 
                        doc.GetAllocator());
    }
}

void unpackJsonToDatabank(const rapidjson::Value& json, Databank < int64_t >& bank)
{
    if (json.GetType() == rapidjson::kObjectType)
    {
        for (rapidjson::Value::ConstMemberIterator itr = json.MemberBegin(); itr != json.MemberEnd(); ++itr)
        {
            bank.add((*itr).name.GetString(), (*itr).value.GetInt64());
        }
    }
}

void unpackJsonToDatabank(const rapidjson::Value& json, Databank < std::string >& bank)
{
    if (json.GetType() == rapidjson::kObjectType)
    {
        for (rapidjson::Value::ConstMemberIterator itr = json.MemberBegin(); itr != json.MemberEnd(); ++itr)
        {
            bank.add((*itr).name.GetString(), (*itr).value.GetString());
        }
    }
}